home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0039 / spr_des / source / spr_des3.asm < prev    next >
Assembly Source File  |  1997-04-16  |  10KB  |  351 lines

  1. * Macro Palette     (don't use ASM68K use Mcc!!!)
  2. * by Robert Warnestam, 1988-04-18
  3. * How to use from GFA basic:
  4. * Start=loaded adrress+$1c    (+28)
  5. * Poke start+0,mode
  6. * Poke start+1,colors
  7. * Poke start+2,light
  8. * Dpoke start+4,col14        (constant color 14 on all palettes)
  9. * Call start+6
  10. * Mode:   0 = Start interrupt
  11. *         1 = Change Palette (see colors&light)
  12. *         2 = Stop interrupt
  13. * Colors: 0 = Blue  level on x, Green level on y, Red  =light
  14. *         1 = Blue  level on x, Red   level on y, Green=light
  15. *         2 = Green level on x, Red   level on y, Blue =light
  16. * Light:  0-7 
  17. *
  18. var    ds.b 6
  19. mode   equ 0
  20. colors equ 1
  21. light  equ 2
  22. col14  equ 4
  23. *
  24. * Execute in supervisor mode
  25.    pea      super(pc)
  26.    move     #38,-(a7)         :\Supexec
  27.    trap     #14
  28.    addq.l   #6,a7
  29.    rts                        :\back to basic
  30. *
  31. * Which mode?
  32. super       nop
  33.    lea      var(pc),a6
  34.    move.b   mode(a6),d0
  35.    cmp.b    #0,d0             :\start interrupt?
  36.    beq      startinterrupt
  37.    cmp.b    #1,d0             :\change palette?
  38.    beq      changepalette
  39.    cmp.b    #2,d0             :\stop interrupt?
  40.    beq      stopinterrupt
  41.    rts
  42. *
  43. * Change palette
  44. changepalette nop
  45.    clr      d0                :\... colors
  46.    clr      d1                :\... light
  47.    clr      d2                :\... color at left-top (light)
  48.    clr      d3                :\... inc at x-axis ($001,$010 or $100)
  49.    clr      d4                :\... inc at y-axis ($001,$010 or $100)
  50.    move.b   colors(a6),d0
  51.    move.b   light(a6),d1
  52.    cmp      #0,d0             :\green and blue?
  53.    beq      greenblue
  54.    cmp      #1,d0             :\red and blue?
  55.    beq      redblue
  56. redgreen   nop
  57.    move     d1,d2             :\blue=light
  58.    move     #$010,d3          :\x=green
  59.    move     #$100,d4          :\y=red
  60.    bra      setrgb
  61. greenblue  nop
  62.    move     d1,d2             :\red=light
  63.    lsl      #8,d2
  64.    move     #$001,d3          :\x=blue
  65.    move     #$010,d4          :\y=green
  66.    bra      setrgb
  67. redblue    nop
  68.    move     d1,d2             :\green=light
  69.    lsl      #4,d2
  70.    move     #$001,d3          :\x=blue
  71.    move     #$100,d4          :\y=red
  72. setrgb     nop
  73.    lea      pal(pc),a0        :\address to 9 palettes (the last is constant)
  74.    move     col14(a6),d5      :\constant color
  75.    move     d2,d6             :\start with this color
  76.    move     #7,d0             :\8 palettes
  77. palloop    nop
  78.    move     #0,0(a0)          :\color 0
  79.    move     d5,28(a0)         :\color 14
  80.    move     #$765,30(a0)      :\color 15
  81.    addq     #2,a0             :\color 1 to 8 will change
  82.    move     d6,d7             :\save start color
  83.    move     #7,d1             :\8 colors to change
  84. colloop    nop
  85.    move     d7,(a0)+          :\set color
  86.    add      d3,d7             :\add with x
  87.    dbf      d1,colloop
  88.    add.l    #14,a0            :\point to next palette
  89.    add      d4,d6             :\add with y
  90.    dbf      d0,palloop
  91.    rts                        :\palette change done!
  92. *
  93. * Start interrupt
  94. startinterrupt nop
  95.    lea      myvec(pc),a0      :\table over my kbd vectors
  96.    lea      kbd1(pc),a1       :\store my vectors
  97.    move.l   a1,(a0)+
  98.    lea      kbd2(pc),a1
  99.    move.l   a1,(a0)+
  100.    lea      kbd3(pc),a1
  101.    move.l   a1,(a0)+
  102.    lea      kbd4(pc),a1
  103.    move.l   a1,(a0)+
  104.    lea      kbd5(pc),a1
  105.    move.l   a1,(a0)+
  106.    lea      kbd6(pc),a1
  107.    move.l   a1,(a0)+
  108.    lea      kbd7(pc),a1
  109.    move.l   a1,(a0)+
  110.    lea      kbd8(pc),a1
  111.    move.l   a1,(a0)+
  112.    lea      kbd9(pc),a1
  113.    move.l   a1,(a0)+
  114. *
  115.    move     #34,-(a7)
  116.    trap     #14               :\get keboard vector table
  117.    addq.l   #2,a7
  118.    move.l   d0,a0             :\ into A0
  119.    lea      kbd1vec(pc),a1    :\store area
  120.    lea      myvec(pc),a2      :\my vectors
  121.    move     #8,d0             :\9 vectors
  122. getvec     nop
  123.    move.l   (a0),(a1)+        :\save vector
  124.    move.l   (a2)+,(a0)+       :\new vector
  125.    dbf      d0,getvec
  126.    lea      oldvbl(pc),a0     :\store old vbl vector
  127.    move.l   $70,(a0)
  128.    lea      vbl(pc),a0        :\new vbl routine
  129.    move.l   a0,$70
  130.    lea      mas1(pc),a0       :\save MFP mask and enable reg.
  131.    move.b   $fffa13,(a0)
  132.    lea      mas2(pc),a0
  133.    move.b   $fffa15,(a0)
  134.    lea      enab1(pc),a0
  135.    move.b   $fffa07,(a0)
  136.    lea      enab2(pc),a0
  137.    move.b   $fffa09,(a0)
  138.    lea      pal0(pc),a0
  139.    move.l   a0,$120           :\first hbl routine into timer B vector
  140.    move.b   #8,$fffa1b        :\timer B in count mode
  141.    and.b    #254,$fffa07      :\disable timer B (vbl turns it on)
  142.    or.b     #1,$fffa13        :\mask
  143.    rts
  144. *
  145. * Stop interrupt
  146. stopinterrupt nop
  147.    move     #34,-(a7)
  148.    trap     #14               :\get keboard vector table
  149.    addq.l   #2,a7
  150.    move.l   d0,a0             :\into A0
  151.    lea      kbd1vec(pc),a1    :\saved vectors
  152.    move     #8,d0             :\9 vectors
  153. setvec     nop
  154.    move.l   (a1)+,(a0)+       :\restore vector
  155.    dbf      d0,setvec
  156.    move.l   oldvbl(pc),$70    :\restore vbl routine
  157.    move.b   mas1(pc),$fffa13  :\restore MFP mask and enable reg.
  158.    move.b   mas2(pc),$fffa15
  159.    move.b   enab1(pc),$fffa07
  160.    move.b   enab2(pc),$fffa09
  161.    rts
  162. *
  163. * Here comes 9 vectors for handling midi & keyboard
  164. *  it will lower IPL to 5 and then jump to the old routine
  165. *
  166. kbd1 move   #$2500,sr
  167.    move.l     kbd1vec(pc),-(a7)
  168.    rts
  169. kbd2 move   #$2500,sr
  170.    move.l     kbd2vec(pc),-(a7)
  171.    rts
  172. kbd3 move   #$2500,sr
  173.    move.l     kbd3vec(pc),-(a7)
  174.    rts
  175. kbd4 move   #$2500,sr
  176.    move.l     kbd4vec(pc),-(a7)
  177.    rts
  178. kbd5 move   #$2500,sr
  179.    move.l     kbd5vec(pc),-(a7)
  180.    rts
  181. kbd6 move   #$2500,sr
  182.    move.l     kbd6vec(pc),-(a7)
  183.    rts
  184. kbd7 move   #$2500,sr
  185.    move.l     kbd7vec(pc),-(a7)
  186.    rts
  187. kbd8 move   #$2500,sr
  188.    move.l     kbd8vec(pc),-(a7)
  189.    rts
  190. kbd9 move   #$2500,sr
  191.    move.l     kbd9vec(pc),-(a7)
  192.    rts
  193. *
  194. * Vbl routine, enable hbl then jump to old vector
  195. vbl move.l  a0,-(a7)
  196.    lea      pal0(pc),a0
  197.    move.l   a0,$120           :\first hbl routine
  198.    move.l   (a7)+,a0
  199.    or.b     #1,$fffa07        :\enable timer B
  200.    move.b   #16,$fffa21       :\wait 16 lines before new palette
  201.    move.l   oldvbl(pc),-(a7) :\jump to old vbl
  202.    rts
  203. *
  204. * Here comes 9 hbl routines, one for each palette
  205. *
  206. pal0 movem.l a0/a1/d0,-(a7)   :\save register
  207.    lea      pal(pc),a0        :\pointer to palettes
  208.    move.l   #$ff8240,a1       :\video chip, color reg.
  209.    move     #15,d0            :\16 colors
  210. set0 move  (a0)+,(a1)+        :\set color
  211.    dbf      d0,set0
  212.    lea      pal1(pc),a0       :\next hbl routine
  213.    move.l   a0,$120
  214.    movem.l  (a7)+,a0/a1/d0    :\restore register
  215.    move.b   #16,$fffa21      :\ at 16 lines from here
  216.    and.b    #254,$fffa0f      :\in-service
  217.    rte
  218. *
  219. pal1 movem.l a0/a1/d0,-(a7)
  220.    lea      pal(pc),a0
  221.    add.l    #32,a0            :\palette 2
  222.    move.l   #$ff8240,a1
  223.    move     #15,d0
  224. set1 move   (a0)+,(a1)+
  225.    dbf      d0,set1
  226.    lea      pal2(pc),a0
  227.    move.l   a0,$120
  228.    movem.l  (a7)+,a0/a1/d0
  229.    move.b   #16,$fffa21
  230.    and.b    #254,$fffa0f
  231.    rte
  232. *
  233. pal2 movem.l a0/a1/d0,-(a7)
  234.    lea      pal(pc),a0
  235.    add.l    #64,a0            :\palette 3
  236.    move.l   #$ff8240,a1
  237.    move     #15,d0
  238. set2 move   (a0)+,(a1)+
  239.    dbf      d0,set2
  240.    lea      pal3(pc),a0
  241.    move.l   a0,$120
  242.    movem.l  (a7)+,a0/a1/d0
  243.    move.b   #16,$fffa21
  244.    and.b    #254,$fffa0f
  245.    rte
  246. *
  247. pal3 movem.l a0/a1/d0,-(a7)
  248.    lea      pal(pc),a0
  249.    add.l    #96,a0            :\palette 4
  250.    move.l   #$ff8240,a1
  251.    move     #15,d0
  252. set3 move   (a0)+,(a1)+
  253.    dbf      d0,set3
  254.    lea      pal4(pc),a0
  255.    move.l   a0,$120
  256.    movem.l  (a7)+,a0/a1/d0
  257.    move.b   #16,$fffa21
  258.    and.b    #254,$fffa0f
  259.    rte
  260. *
  261. pal4 movem.l a0/a1/d0,-(a7)
  262.    lea      pal(pc),a0
  263.    add.l    #128,a0            :\palette 5
  264.    move.l   #$ff8240,a1
  265.    move     #15,d0
  266. set4 move   (a0)+,(a1)+
  267.    dbf      d0,set4
  268.    lea      pal5(pc),a0
  269.    move.l   a0,$120
  270.    movem.l  (a7)+,a0/a1/d0
  271.    move.b   #16,$fffa21
  272.    and.b    #254,$fffa0f
  273.    rte
  274. *
  275. pal5 movem.l a0/a1/d0,-(a7)
  276.    lea      pal(pc),a0
  277.    add.l    #160,a0            :\palette 6
  278.    move.l   #$ff8240,a1
  279.    move     #15,d0
  280. set5 move   (a0)+,(a1)+
  281.    dbf      d0,set5
  282.    lea      pal6(pc),a0
  283.    move.l   a0,$120
  284.    movem.l  (a7)+,a0/a1/d0
  285.    move.b   #16,$fffa21
  286.    and.b    #254,$fffa0f
  287.    rte
  288. *
  289. pal6 movem.l a0/a1/d0,-(a7)
  290.    lea      pal(pc),a0
  291.    add.l    #192,a0            :\palette 7
  292.    move.l   #$ff8240,a1
  293.    move     #15,d0
  294. set6 move   (a0)+,(a1)+
  295.    dbf      d0,set6
  296.    lea      pal7(pc),a0
  297.    move.l   a0,$120
  298.    movem.l  (a7)+,a0/a1/d0
  299.    move.b   #16,$fffa21
  300.    and.b    #254,$fffa0f
  301.    rte
  302. *
  303. pal7 movem.l a0/a1/d0,-(a7)
  304.    lea      pal(pc),a0
  305.    add.l    #224,a0            :\palette 8
  306.    move.l   #$ff8240,a1
  307.    move     #15,d0
  308. set7 move   (a0)+,(a1)+
  309.    dbf      d0,set7
  310.    lea      pal8(pc),a0
  311.    move.l   a0,$120
  312.    movem.l  (a7)+,a0/a1/d0
  313.    move.b   #16,$fffa21
  314.    and.b    #254,$fffa0f
  315.    rte
  316. *
  317. pal8 movem.l a0/a1/d0,-(a7)
  318.    lea      pal(pc),a0
  319.    add.l    #256,a0            :\palette 9
  320.    move.l   #$ff8240,a1
  321.    move     #15,d0
  322. set8 move   (a0)+,(a1)+
  323.    dbf      d0,set8
  324.    movem.l  (a7)+,a0/a1/d0
  325.    move.b   #1,$fffa21
  326.    and.b    #254,$fffa07      :\disable hbl, vbl turns it on again
  327.    and.b    #254,$fffa0f
  328.    rte
  329. *
  330. kbd1vec    ds.l  1
  331. kbd2vec    ds.l  1
  332. kbd3vec    ds.l  1
  333. kbd4vec    ds.l  1
  334. kbd5vec    ds.l  1
  335. kbd6vec    ds.l  1
  336. kbd7vec    ds.l  1
  337. kbd8vec    ds.l  1
  338. kbd9vec    ds.l  1
  339. myvec      ds.l  9
  340. oldvbl     ds.l  1
  341. mas1       ds.w  1
  342. mas2       ds.w  1
  343. enab1       ds.w  1
  344. enab2       ds.w  1
  345. pal         ds.b  256
  346.             dc.w  $000,$000,$111,$222,$333,$444,$555,$666
  347.             dc.w  $777,$007,$070,$700,$000,$000,$000,$765
  348. *
  349.    end
  350.  
  351.